package com.woniu.staff.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.woniu.staff.dto.EmployeeDto;
import com.woniu.staff.form.AddEmployeeForm;
import com.woniu.staff.form.AddStationBossForm;
import com.woniu.staff.model.Employee;
import com.woniu.staff.param.*;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 吴彦祖
 * @since 2024年05月23日
 */
public interface EmployeeService extends IService<Employee> {

    /**
     * 新增员工
     * @param form  新增员工对象
     * @return  新增成功的对象
     * @throws Exception
     */
    Employee insert(AddEmployeeForm form) throws Exception;

    /**
     * 根据站点id和状态查询相应的员工信息 无状态则查站点全部员工
     * @param form 站点id  和状态id
     * @return 输出查询到的员工对象集合
     */
    Page<Employee> findAllByStationId(FindAllStateEmployeeParam form);

    /**
     * 修改员工状态
     * @param toBean 员工id 状态码
     * @return 返回修改成功后的员工对象dto
     * @throws Exception
     */
    EmployeeDto UpdateEmployeeStateForm(UpdateEmployeeStateParam toBean) throws Exception;
    /**
     * 通过员工账号id修改员工载重量
     * @param param 员工账号id 载重量
     * @return 返回修改后的员工dto
     */
    EmployeeDto updateEmployeeLoad(UpdateEmployeeLoadParam param);

    /**
     * 员工登录
     * @param toBean 账号密码
     * @return 输出登录对象
     */
    EmployeeDto login(EmployeeLoginParam toBean);


    /**
     * 分页查询所有可用的管理员工
     * @param toBean 分页对象
     * @return 分页page对象
     */
    Page<EmployeeDto> findUsefulHandlerPage(PageParam toBean);

    /**
     * 查询所有可用的管理员工
     * @return
     */
    List<EmployeeDto> findUsefulHandler();

    /**
     * 查询除自己外的其他可用管理员id
     * @param id 管理员id
     * @return 管理员对象集合
     */
    List<EmployeeDto> showUsefulHandlerExceptOne(Integer id);
    /**
     * 根据账号查询员工对象
     * @param accountId 账号id
     * @return 返回账号对象
     */
    EmployeeDto findEmployeeByAccountId(String accountId);

    /**
     * 根据站点id 查询是否有除负责人外的员工
     * accountId 站点id
     * handlerId 负责人id
     * @return 有true 没有false
     */
    Boolean isHaveEmploye(String accountId, String handlerId);

    Page<Employee> findAllByStationIdWithoutHandler(int handlerId,int pageNum,int pageSize);

    void del(Integer id);

    Employee byAccountId(Integer id);

    Employee byStationId(String stationId);

    Employee byId(Integer id);

    /**
     * 员工绑定站点
     * id 账号id roleId 角色id
     */
    Employee bindingStation(Integer id, Integer stationId);

    Employee addEmployeeUser(Integer userId, AddEmployeeUserParam toBean);

    Employee addEmployeeStation(Integer userId, AddEmployeeUserParam toBean);

    Employee addStationBoss(AddStationBossForm form) throws Exception;

    List<EmployeeDto> findUsefulHandlerExcept(Integer employId);
}
